import { createRouter, createWebHistory, Router } from 'vue-router';
import { AuthUtils, TokenManager } from '@/utils/auth';
import routes from './routes';

const router: Router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: routes,
});

// 不需要登录就可以访问的白名单路径（只包含真正的公开页面）
const whiteList = ['/login', '/register', '/study'];

// 动态路由白名单检查函数
const isDynamicRouteAllowed = (path: string): boolean => {
  // 课程详情页面
  if (path.startsWith('/course/')) return true;
  // 视频播放页面
  if (path.startsWith('/video/')) return true;
  return false;
};

router.beforeEach(async (to, from, next) => {
  // 检查用户认证状态
  const token = TokenManager.getToken();
  const hasValidToken = TokenManager.hasToken() && TokenManager.isValidToken();
  const isAuthenticated = AuthUtils.isAuthenticated();

  console.log("🔐 路由守卫检查:", {
    path: to.path,
    fromPath: from.path,
    hasToken: !!token,
    hasValidToken,
    isAuthenticated,
    tokenLength: token ? token.length : 0
  });

  // 检查是否在白名单中（登录和注册页面）
  const isWhiteListPath = whiteList.includes(to.path);

  // 检查是否是动态路由（课程、视频页面）
  const isDynamicAllowed = isDynamicRouteAllowed(to.path);

  // 如果没有有效token
  if (!hasValidToken) {
    if (isWhiteListPath) {
      // 访问白名单页面（登录、注册），直接放行
      console.log("✅ 访问白名单页面，允许访问:", to.path);
      next();
    } else {
      // 访问受保护页面，重定向到登录页
      console.log("❌ 无有效Token，重定向到登录页。目标路径:", to.path);

      // 保存原始路径，登录成功后可以重定向回来
      const redirectPath = to.path !== '/login' ? to.fullPath : '/home';
      next({
        path: '/login',
        query: { redirect: redirectPath }
      });
    }
  } else {
    // 有有效token
    if (to.path === '/login') {
      // 已登录用户访问登录页，重定向到首页或原来要访问的页面
      const redirectPath = (to.query.redirect as string) || '/home';
      console.log("✅ 已登录用户访问登录页，重定向到:", redirectPath);
      next({ path: redirectPath });
    } else {
      // 已登录用户访问其他页面，直接放行
      console.log("✅ 已登录用户，允许访问:", to.path);
      next();
    }
  }
});

export default router;
